package com.spring.springcloud.Zookeeper.集群;

/**
 * 服务器具有四种状态，分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。
 * （1）LOOKING：寻 找 Leader 状态。当服务器处于该状态时，它会认为当前集群中没有 Leader，因此需要进入 Leader 选举状态。
 * （2）FOLLOWING：跟随者状态。表明当前服务器角色是 Follower。
 * （3）LEADING：领导者状态。表明当前服务器角色是 Leader。
 * （4）OBSERVING：观察者状态。表明当前服务器角色是 Observer。
 *
 * Leader
 * （1）事务请求的唯一调度和处理者，保证集群事务处理的顺序性
 * （2）集群内部各服务的调度者
 *
 *
 * Follower
 * （1）处理客户端的非事务请求，转发事务请求给 Leader 服务器
 * （2）参与事务请求 Proposal 的投票
 * （3）参与 Leader 选举投票
 *
 *
 * Observer
 * （1）3.0 版本以后引入的一个服务器角色，在不影响集群事务处理能力的基础上提升集群的非事务处理能力
 * （2）处理客户端的非事务请求，转发事务请求给 Leader 服务器
 * （3）不参与任何形式的投票
 *
 *
 */
public class 工作机制 {
}
/**
 * Zookeeper从设计模式角度来理解：
 * 是一个基于观察者模式设计的分布式服务管理框架，
 * 它负责存储和管理大家都关心的数据，然后接受观察者的注 册，
 * 一旦这些数据的状态发生变化，Zookeeper就
 * 将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
 *
 * Zookeeper=文件系统+通知机制
 *
 * Zookeeper:一个领导者(Leader)(管写) ，多个跟随者( Follower)(管读)组成的集群。
 * 集群中只要有半数以上节点存活，Zookeeper集 群就能正常服务。所以Zookeeper适合安装奇数台服务器。
 * 全局数据一致:每个Server保存一份相同的数据副本，Client无论连接到哪个Server,数据都是--致的
 * 更新请求顺序执行，来自同一个Client的更新请求按其发送顺序依次执行。
 * 数据更新原子性，一次 数据更新要么成功，要么失败
 * 实时性，在一定时间范围内，Client能读到最新数据。
 *
 *
 * ZooKeeper 数据模型的结构与 Unix 文件系统很类似，整体上可以看作是一棵树，每个
 * 节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据，
 * 每个 ZNode 都可以通过其路径唯一标识。    //不适合存储大量数据
 *
 *
 */

/**
 * 应用场景
 * 提供的服务包括：统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等
 *
 * 分布式环境下，配置文件同步非常常见。
 * 2）配置管理可交由ZooKeeper实现。
 * （2）各个客户端服务器监听这个Znode。
 * （3）一 旦Znode中的数据被修改，ZooKeeper将通知各个客户端服务器。
 * （2）对配置文件修改后，希望能够快速同步到各个节点上。
 * （1）一般要求一个集群中，所有节点的配置信息是一致的，比如 Kafka 集群。
 * （1）可将配置信息写入ZooKeeper上的一个Znode。
 *
 *
 *分布式环境中，实时掌握每个节点的状态是必要的。
 * （1）可根据节点实时状态做出一些调整。
 * 2）ZooKeeper可以实现实时监控节点状态变化
 * （1）可将节点信息写入ZooKeeper上的一个ZNode。
 * （2）监听这个ZNode可获取它的实时状态变化。
 *
 */
